package com.whj.wkpt.dto;

import java.util.List;

/**
 * 分页结果封装类
 * 用于封装分页查询的结果，包括数据列表、分页信息等
 * 
 * @param <T> 数据列表元素类型
 */
public class PageResultDTO<T> {
    // 数据列表
    private List<T> content;
    // 当前页码
    private int page;
    // 每页大小
    private int size;
    // 总记录数
    private long totalElements;
    // 总页数
    private int totalPages;

    /**
     * 构造函数
     * 
     * @param content 数据列表
     * @param page 当前页码
     * @param size 每页大小
     * @param totalElements 总记录数
     */
    public PageResultDTO(List<T> content, int page, int size, long totalElements) {
        this.content = content;
        this.page = page;
        this.size = size;
        this.totalElements = totalElements;
        this.totalPages = (int) Math.ceil((double) totalElements / size);
    }

    // Getters and Setters
    public List<T> getContent() {
        return content;
    }

    public void setContent(List<T> content) {
        this.content = content;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public int getSize() {
        return size;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public long getTotalElements() {
        return totalElements;
    }

    public void setTotalElements(long totalElements) {
        this.totalElements = totalElements;
    }

    public int getTotalPages() {
        return totalPages;
    }

    public void setTotalPages(int totalPages) {
        this.totalPages = totalPages;
    }

    /**
     * 判断是否为第一页
     * 
     * @return 如果是第一页返回true，否则返回false
     */
    public boolean isFirst() {
        return page == 0;
    }

    /**
     * 判断是否为最后一页
     * 
     * @return 如果是最后一页返回true，否则返回false
     */
    public boolean isLast() {
        return page >= totalPages - 1;
    }

    /**
     * 判断是否还有下一页
     * 
     * @return 如果有下一页返回true，否则返回false
     */
    public boolean hasNext() {
        return page < totalPages - 1;
    }

    /**
     * 判断是否还有上一页
     * 
     * @return 如果有上一页返回true，否则返回false
     */
    public boolean hasPrevious() {
        return page > 0;
    }
}